package src.itheima02;

import java.util.HashMap;
import java.util.Map;

/*
    java.util.Map<K,V>接口
        双列集合的根接口,里面定义的方法,子接口/实现类都有
        K: 键的类型     键 唯一
        V: 值的类型     值 可重复
        特点:
            1.键 唯一,值 可重复
            2.一个键对应一个值(一一对应关系,称为映射关系/键值对)
            3.通过键维护映射关系(只能通过键获取值,不能通过值获取键)

    常用实现类

        java.util.HashMap<K,V>集合
            特点:
                1.具备哈希特性: 针对键,键唯一,无索引,无序
                2.希特性: 唯一,无索引,无序
                3.要求: 键所属的类,覆盖重写hashCode方法和equals方法

        java.util.LinkedHashMap<K,V>集合
            特点:
                1.具备哈希特性+链表特性: 针对键
                2.哈希特性: 唯一,无索引
                3.链表特性: 有序
                3.要求: 键所属的类,覆盖重写hashCode方法和equals方法
    常用方法:
        - public V put(K key, V value):  把指定的键与指定的值添加到Map集合中。
            第一次存储该键: 返回 null
            已经存储过该键: 返回的被替换的值
            键重复,值替换

        - public V get(Object key) 根据指定的键，在Map集合中获取对应的值。
        - public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除，返回被删除元素的值。
        - public boolean containKey(Object key):判断该集合中是否有此键。
        - public boolean containValue(Object value):判断该集合中是否有此值。
 */
public class Demo02Map {
    public static void main(String[] args) {
        //创建Map集合对象,键: String,值: String
        Map<String,String> map = new HashMap<>();
        //添加键值对: put
        map.put("黄晓明","杨颖");
        String value = map.put("文章","马伊琍");
        System.out.println(value);//null
        //替换的值或删除的键对应的值会被传出来
        value = map.put("文章","姚笛");
        System.out.println(value);//马伊琍
        map.put("谢霆锋","王菲");
        System.out.println(map);//{文章=姚笛, 谢霆锋=王菲, 黄晓明=杨颖}

        //获取"王菲"
        String value2 = map.get("谢霆锋");
        System.out.println(value2);//王菲
        //删除"文章"这个键
        String value3 = map.remove("文章");
        System.out.println(value3);//姚笛
        System.out.println(map);

        //判断是否包含"文章"这个键
        System.out.println("判断是否包含 文章 这个键?"+map.containsKey("文章"));//false

        //判断是否包含 杨颖 这个值
        System.out.println("判断是否包含 杨颖 这个值? "+map.containsValue("杨颖"));//true
    }
}
